/*----------------------------------------\ | Data step Function to put all variable left aligned, concatenate | | the variables if 2 or more variables are give; | |-------------------------------------------| |--------------------------------------------------------------------| |---------------------------| | Arguments: | | charvar - keyword or positional parameter; | | character variables (if more than 1 variables, | | separated by space; | | numvar - keyword or positional parameter; | | numeric variables (if more than 1 variables, separated| | by space; | |--------------------------------| |--------------------------------------------------------------------| |---------------------------------------| | Example: | | %put %trimd(pt, atafid vtvfid); | | %trimd(charvar=, numvar=) / %trimd(charvar, numvar); | | Usgae: trimd/parmbuff; | \----------------------------------------*/ %macro trimd/parmbuff; /*--------------------------------------------\ | Copy Right: Duo Zhou; | | Created: 11-01-2002 11:54pm; | | Purpose: trim(left(sting)) | \--------------------------------------------*/ %local charvar numvar; %let _trimdvallen=%length(%quote(%trim(%quote(%left(%quote(&syspbuff)))))); %do %while((&_trimdvallen gt %length(%quote(%trim(%quote(%left(%quote(%sysfunc(tranwrd(%quote(&syspbuff),%quote(, ), %quote(,)))))))))) or (&_trimdvallen gt %length(%quote(%trim(%quote(%left(%quote(%sysfunc(tranwrd(%quote(&syspbuff),%quote( ,), %quote(,))))))))))); %let syspbuff=%sysfunc(tranwrd(%quote(&syspbuff),%quote(, ), %quote(,))); %let syspbuff=%sysfunc(tranwrd(%quote(&syspbuff),%quote( ,), %quote(,))); %let _trimdvallen=%length(%quote(%trim(%quote(%left(%quote(&syspbuff)))))); %end; %let syspbuff=%sysfunc(tranwrd(%quote(&syspbuff),%quote(,,), %quote(,´))); %let _trimdstr_=%sysfunc(translate(%quote(%substr(%quote(%trim(%quote(%left(%quote(&syspbuff))))), 2, %eval(%length(%trim(%quote(%left(%quote(&syspbuff)))))-2))), %str(%'), %str(%"))); %let _trimdwn_=0; %let charvar=; %let numvar=; %let catdlm=; %let dlm=; %do %while(%length(%nrbquote(%scan(%nrbquote(&_trimdstr_), %eval(&_trimdwn_+1), %nrbquote(,()))))); %let _trimdwn_=%eval(&_trimdwn_+1); %let _trimdparam_=%nrbquote(%qscan(%nrbquote(&_trimdstr_), &_trimdwn_, %nrbquote(,()))); %let _trimdparam1_=%trim(%left(%qscan(%nrbquote(&_trimdparam_), 1, %str(=)))); %let _trimdparam2_=%substr(%quote(&_trimdparam_), %eval(%index(%quote(&_trimdparam_),%str(=))+1), %eval(%length(&_trimdparam_)-%index(%quote(&_trimdparam_),%str(=)))); %if (not %index(%BQUOTE(%trim(%BQUOTE(%left(%BQUOTE(&_trimdparam_))))), %str(=))) %then %do; %if (%index(%BQUOTE(%trim(%BQUOTE(%left(%BQUOTE(&_trimdparam2_))))), %str(%()) eq 1) and (%index(%BQUOTE(%trim(%BQUOTE(%left(%BQUOTE(%sysfunc(reverse(%quote(&_trimdparam2_)))))))), %str(%))) eq 1) %then %let _trimdparam2_=%substr(%quote(%trim(%quote(%left(%quote(&_trimdparam2_))))), 2, %eval(%length(%trim(%quote(%left(%quote(&_trimdparam2_)))))-2)); %if (%quote(&_trimdwn_) = %quote(1)) %then %let charvar=&_trimdparam2_; %else %if (%quote(&_trimdwn_) = %quote(2)) %then %let numvar=&_trimdparam2_; %else %if (%quote(&_trimdwn_) = %quote(3)) %then %let catdlm=&_trimdparam2_; %end; %else %if (%index(%BQUOTE(%trim(%BQUOTE(%left(%BQUOTE(&_trimdparam2_))))), %str(%()) eq 1) and (%index(%BQUOTE(%trim(%BQUOTE(%left(%BQUOTE(%sysfunc(reverse(%quote(&_trimdparam2_)))))))), %str(%))) eq 1) %then %let &_trimdparam1_=%substr(%quote(%trim(%quote(%left(%quote(&_trimdparam2_))))), 2, %eval(%length(%trim(%quote(%left(%quote(&_trimdparam2_)))))-2)); %else %let &_trimdparam1_=&_trimdparam2_; %end; %let _trimdoutstr_=; %let _trimdcharvn_=0; %if (%quote(&catdlm) eq) and (%quote(&dlm) ne) %then %let catdlm=%quote(&dlm); %else %if (%quote(&catdlm) eq) and (%quote(&dlm) eq) %then %let catdlm=%quote(_); %do %while(%length(%nrbquote(%scan(%nrbquote(&charvar), %eval(&_trimdcharvn_+1), %nrbquote( ))))); %let _trimdcharvn_=%eval(&_trimdcharvn_+1); %if &_trimdcharvn_ = 1 %then %let _trimdoutstr_=trimn(left(%nrbquote(%qscan(%nrbquote(&charvar), &_trimdcharvn_, %nrbquote( ))))); %else %let _trimdoutstr_=&_trimdoutstr_||"%trim(%quote(%left(%quote(&catdlm))))"||trimn(left(%nrbquote(%qscan(%nrbquote(&charvar), &_trimdcharvn_, %nrbquote( ))))); %end; %let _trimdnumvn_=0; %do %while(%length(%nrbquote(%scan(%nrbquote(&numvar), %eval(&_trimdnumvn_+1), %nrbquote( ))))); %let _trimdnumvn_=%eval(&_trimdnumvn_+1); %if (&_trimdnumvn_ = 1 and &_trimdcharvn_=0) %then %let _trimdoutstr_=trimn(left(put(%nrbquote(%qscan(%nrbquote(&numvar), &_trimdnumvn_, %nrbquote( ))), best12.))); %else %let _trimdoutstr_=&_trimdoutstr_||"%trim(%quote(%left(%quote(&catdlm))))"||trimn(left(put(%nrbquote(%qscan(%nrbquote(&numvar), &_trimdnumvn_, %nrbquote( ))), best12.))); %end; %if (%index(%quote(&_trimdoutstr_),%quote(´))) %then %let _trimdoutstr_=%sysfunc(translate(%quote(&_trimdoutstr_), %quote(,), %quote(´))); &_trimdoutstr_ %mend trimd;